// 导入 wechat-http 模块
import http from 'wechat-http'

http.baseURL = 'https://live-api.itheima.net'

// 配置响应拦截器
http.intercept.response = async function ({ data, config }) {
  // 如果状态码为401，则表明token已经过期了
  if (data.code === 401) {
    const app = getApp()
    // console.log(app.refreshToken)
    // 状态码为401 且状态码为/refreshToken 表明refreshToken已经过期了
    if (config.url.includes('/refreshToken')) {
      const pageStack = getCurrentPages()
      const currentPage = pageStack.pop()
      const redirectURL = currentPage.route
      console.log('redirectURL', redirectURL)
      // 检测 redirectURL 是否是tabbar页面
      const isTabBarPage = wx.utils.isTabBarPage(redirectURL)
      // 如果是则使用 wx.switchTab方法跳转
      const routeType = isTabBarPage ? 'switchTab' : 'redirectTo'
      // 路由跳转====>登录页
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}&routeType=${routeType}`
      })
    }
    // 调用接口获取新的token
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: 'Bearer ' + app.refreshToken,
      },
    })
    // 检测接口是否调用成功
    if (res.code !== 10000) return wx.utils.toast('刷新token失败')
    // 重新存储新的 token
    app.setToken('token', res.data.token)
    app.setToken('refreshToken', res.data.refreshToken)
    // 获取到原来接口请求的参数
    console.log('config', config)
    config = Object.assign(config, {
      // 更新后的token
      header: { Authorization: 'Bearer ' + res.data.token },
    })
    return http(config)
  }
  // 将data结构出来减少代码量 res.data===> { data }
  // console.log('响应拦截器', res)
  return data
}

// 配置请求拦截器
http.intercept.request = function (options) {
  // 扩展头信息
  const defaultHeader = {}
  // 身份认证
  defaultHeader.Authorization = 'Bearer ' + getApp().token
  // 与默认头信息合并
  // 处理后的请求头信息
  options.header = Object.assign({}, defaultHeader, options.header)
  return options
}

// 以模块方式导出
export default http

// 以全局方式导出
wx.http = http
